Computer aided design (CAD) tools have become standard in many industries. Such tools are used in designing everything from buildings to micro-machines. Generally, designs are created in two dimensional drawings which might include various individual piece drawings as well as assembly and view drawings.
It is often useful when working with design drawings to view three dimensional representations of the objects in the drawings. Three dimensional (3D) visualization of objects is useful in a variety of contexts. For example, CAD designs can be converted to 3D representations to allow designers a better understanding of the element being designed.
Typically, when a CAD model is subjected to 3D visualization, the CAD model includes a significant amount of data that is not relevant for the view. Such data includes engineering details that create a performance barrier for real-time 3D visualization due to the rendering cost of redundant unseen features. Industry-standard algorithms for hidden feature removal, such as ray-casting, cannot be directly applied to the majority of CAD-produced models. This is due to geometry defects prevalent in CAD files (incorrectly oriented faces and normals, surface gaps and disjointed surfaces) coupled with the requirement for both speed and accuracy in real-time visualization.
Another issue in 3D visualization are errors in the proper orientation of CAD geometry. The true direction a 3D surface faces is represented by its normal. Normals are a fundamental component in 3D graphics—they form the basis of rendering, back-face removal, lighting and shading equations, and collision detection. The tesselation process in CAD/modeling tools often leads to the inversion of many surface normals in the 3D model. As a result, visualization is of unacceptable quality until these normals are corrected—a process termed, normal unification.
It is difficult, on the basis of a single face, to determine whether or not it has an inverted normal. Two connected triangles from a surface mesh may have oppositely directed normals because they form a sharp edge or because one of the two of the faces of the triangles has an inverted normal. It is difficult to distinguish these possibilities, and in the case of an inversion, which face is actually inverted.
It is possible to solve true orientation through ray-casting. This is, however, a computationally expensive process. Typically, models contain millions of triangles and it is computationally impractical to apply a brute-force approach using ray-casting for each triangle in the model.